<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>逻辑中断</title>
</head>

<body>
  <script>
    // 逻辑中断   && ||

    // 1. 逻辑与中断：如果左边为假，则中断，如果左边为真，则返回右边的值
    console.log(false && 1 + 2);  //false
    console.log(0 && 1 + 2);    //0当假看 会发生中断
    console.log('' && 1 + 2);    //''  0 undefined  null false

    console.log(true && 1 + 2);    //3
    console.log(1 && 1 + 2);

    //逻辑或终端  左侧为真就中断   左边为假jiu
    console.log(true || 1 + 2);  //true  发生终端
    console.log(1 || 1 + 2)    //1

    // 使用场景
    function sum(x, y) {
     //undefined  || 0 就会变成0
      x = x || 0
      // 1 || 0  非0 都是真的不会执行右边的代码了返回非0数字
      y = y || 0
      return x + y
      // 返回NaN不严谨的原因就是实参没有赋值默认为undefined

    }
    console.log(sum(1, 2));
    // console.log(sum());    //NaN--此刻逻辑是不严谨的




















    // console.log(false && 1 + 2)  // false
    // console.log(0 && 1 + 2)  // 0
    // console.log('' && 1 + 2)  // ''
    // console.log(undefined && 1 + 2)  // undefined
    // console.log(true && 1 + 2)  // 3 此处不会发生逻辑中断
    // console.log(1 && 1 + 2)  // 3 此处不会发生逻辑中断

    // 2. 逻辑或中断，如果左侧为真，则中断，如果左侧为假，则返回右边的值
    // console.log(true || 1 + 2) // true  发生了中断
    // console.log(1 || 1 + 2) // 1  发生了中断
    // console.log(false || 1 + 2) // 3 此处不会发生逻辑中断

    // 3. 使用场景
    // function sum(x, y) {
    //   return x + y
    // }
    // console.log(sum(1, 2)) // 3
    // console.log(sum()) // NaN

    function sum(x, y) {   // x = undefined
      //  x = undefined || 0
      // x = 1 || 0
      x = x || 0
      y = y || 0
      return x + y
    }
    console.log(sum())  // 0
    console.log(sum(1, 2)) // 3
  </script>
</body>

</html>